/**
 * TODO: Copyright info
 */

#ifndef __NAVINFO_ENGINE_COMMON_HPP__
#define __NAVINFO_ENGINE_COMMON_HPP__

#include <cstdint>
#include <functional>
#include <memory>
#include <vector>
#include <string>

namespace Navinfo {
namespace Engine {

typedef uint64_t LinkID; ///< Represent a link in database.

/**
 * @brief A structure holds link with direction
 * 
 */
struct DirectedLinkID
{
    LinkID m_LinkID;
    bool   m_PositiveDirection;  ///< true means from start to end, false means inverted.
};

/**
 * @brief A two dimension position.
 * 
 */
struct Pos2D
{
    double   m_Longitude;
    double   m_Latitude;
};

/**
 * @brief A three dimension position.
 * 
 */
struct Pos3D : Pos2D
{
    double   m_Altitude;
};

/**
 * @brief A two dimension rectangle.
 * 
 */
struct PosRectangle
{
    Pos2D m_LeftBottom;
    Pos2D m_RightTop;
};

} //namespace Engine
} //namespace Navinfo

#endif //__NAVINFO_ENGINE_COMMON_HPP__